package com.example.wiki.controller;


import com.example.wiki.entity.Content;
import com.example.wiki.entity.Doc;
import com.example.wiki.entity.req.DocQueryReq;
import com.example.wiki.entity.req.DocSaveReq;
import com.example.wiki.entity.resp.CommonResp;
import com.example.wiki.entity.resp.DocQueryResp;
import com.example.wiki.entity.resp.PageResp;
import com.example.wiki.service.IContentService;
import com.example.wiki.service.IDocService;
import com.example.wiki.util.CopyUtil;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

/**
 * <p>
 * 文档表 前端控制器
 * </p>
 *
 * @author jerry
 * @since 2024-10-08
 */
@RestController
@RequestMapping("/doc")
public class DocController {

    @Autowired
    private IDocService docService;
    @Autowired
    private IContentService contentService;

    //定义一个方法根据ebookid--检索content内容
    @RequestMapping("/find-content/{id}")
    public CommonResp findContent(@PathVariable Long id) {
        //响应--》CommonResp
        CommonResp<Object> commonResp = new CommonResp<>();
        //使用业务层的方法来实现查询操作
        String content = docService.findContent(id);
        //设置操作结果
        commonResp.setContent(content);
        //返回信息
        return commonResp;
    }

    //分页查询的请求接口
    @GetMapping("/list")
    public CommonResp getDocListByPage(DocQueryReq req) {
        //调用业务层的查询方法
        PageResp<DocQueryReq> repsPage = docService.getDocListByPage(req);
        CommonResp<PageResp<DocQueryReq>> resp = new CommonResp<>();
        resp.setContent(repsPage);
        return resp;
    }

    //查询所有的请求接口
    @GetMapping("/all")
    public CommonResp allList(DocQueryReq req) {
        List<DocQueryResp> resp = docService.allList(req);
        CommonResp<List<DocQueryResp>> listCommonResp = new CommonResp<>();
        listCommonResp.setContent(resp);
        return listCommonResp;
    }

    @PostMapping("/save")
    public CommonResp save(@Valid @RequestBody DocSaveReq req) {
        //调用业务方法
        boolean saveOrUpdate = docService.saveOrUpdateDoc(req);
        //返回结果
        CommonResp resp = new CommonResp<>();
        resp.setSuccess(saveOrUpdate);
        return resp;
    }

    @GetMapping("/remove")
    public CommonResp remove(int id) {
        //调用业务方法
        boolean remove = docService.removeById(id);
        //返回结果
        CommonResp<Object> resp = new CommonResp<>();
        resp.setSuccess(remove);
        return resp;
    }

    //定义一个删除操作的方法  in  集合范围
    @DeleteMapping("/delete/{idsStr}")
    public CommonResp delete(@PathVariable String idsStr) {
        //响应--》CommonResp
        CommonResp<Object> commonResp = new CommonResp<>();
        //输出idsStr
        System.out.println("ids==>" + idsStr);
        //使用业务层的方法来实现操作
        List<String> ids = Arrays.asList(idsStr.split(","));
        boolean success = docService.removeByIds(ids);
        //设置操作结果
        commonResp.setSuccess(success);
        //返回信息
        return commonResp;
    }

    @GetMapping("/findContentById/{id}")
    public CommonResp findContentById(@PathVariable int id) {
        // 根据给定的ID从contentService获取内容
        Content content = contentService.getById(id);
        // 调用docService增加该内容的浏览次数
        docService.increaseViewCount(id);
        // 创建一个CommonResp对象用于封装响应内容
        CommonResp<String> resp = new CommonResp<>();
        // 检查内容是否存在且内容不为null
        if (content!=null && content.getContent()!=null){
            // 如果内容存在，则将内容设置到响应对象中
            resp.setContent(content.getContent());
        }
        return resp;
    }

    @GetMapping("/vote/{id}")
    public CommonResp vote(@PathVariable int id) {

        // 调用docService增加该内容的浏览次数
        docService.increaseVoteCount(id);
        // 创建一个CommonResp对象用于封装响应内容
        CommonResp<String> resp = new CommonResp<>();


        return resp;
    }
}
